package com.mall.system.domain.entity;

import com.mall.common.core.domain.BaseEntity;
import java.util.ArrayList;
import java.util.List;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 菜单权限表 sys_menu
 * Created by zhonglin on 2020/4/8.
 */
public class SysMenu
    extends BaseEntity {

  private static final long serialVersionUID = 1L;

  /**
   * 菜单ID
   */
  private Long menuId;

  /**
   * 菜单名称
   */
  private String menuName;

  /**
   * 父菜单名称
   */
  private String parentName;

  /**
   * 父菜单ID
   */
  private Long parentId;

  /**
   * 显示顺序
   */
  private String orderNum;

  /**
   * 菜单URL
   */
  private String url;

  /**
   * 打开方式：menuItem页签 menuBlank新窗口
   */
  private String target;

  /**
   * 类型:0目录,1菜单,2按钮
   */
  private String menuType;

  /**
   * 菜单状态:0显示,1隐藏
   */
  private String visible;

  /**
   * 权限字符串
   */
  private String perms;

  /**
   * 菜单图标
   */
  private String icon;

  /**
   * 子菜单
   */
  private List<SysMenu> children = new ArrayList<SysMenu>();

  public Long getMenuId() {

    return menuId;
  }

  public void setMenuId(Long menuId) {

    this.menuId = menuId;
  }

  @NotBlank(message = "菜单名称不能为空")
  @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
  public String getMenuName() {

    return menuName;
  }

  public void setMenuName(String menuName) {

    this.menuName = menuName;
  }

  public String getParentName() {

    return parentName;
  }

  public void setParentName(String parentName) {

    this.parentName = parentName;
  }

  public Long getParentId() {

    return parentId;
  }

  public void setParentId(Long parentId) {

    this.parentId = parentId;
  }

  @NotBlank(message = "显示顺序不能为空")
  public String getOrderNum() {

    return orderNum;
  }

  public void setOrderNum(String orderNum) {

    this.orderNum = orderNum;
  }

  @Size(min = 0, max = 200, message = "请求地址不能超过200个字符")
  public String getUrl() {

    return url;
  }

  public void setUrl(String url) {

    this.url = url;
  }

  public String getTarget() {

    return target;
  }

  public void setTarget(String target) {

    this.target = target;
  }

  @NotBlank(message = "菜单类型不能为空")
  public String getMenuType() {

    return menuType;
  }

  public void setMenuType(String menuType) {

    this.menuType = menuType;
  }

  public String getVisible() {

    return visible;
  }

  public void setVisible(String visible) {

    this.visible = visible;
  }

  @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
  public String getPerms() {

    return perms;
  }

  public void setPerms(String perms) {

    this.perms = perms;
  }

  public String getIcon() {

    return icon;
  }

  public void setIcon(String icon) {

    this.icon = icon;
  }

  public List<SysMenu> getChildren() {

    return children;
  }

  public void setChildren(List<SysMenu> children) {

    this.children = children;
  }

  @Override
  public String toString() {

    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("menuId", getMenuId())
                                                                    .append("menuName", getMenuName())
                                                                    .append("parentId", getParentId())
                                                                    .append("orderNum", getOrderNum())
                                                                    .append("url", getUrl())
                                                                    .append("target", getTarget())
                                                                    .append("menuType", getMenuType())
                                                                    .append("visible", getVisible())
                                                                    .append("perms", getPerms())
                                                                    .append("icon", getIcon())
                                                                    .append("createBy", getCreateBy())
                                                                    .append("createTime", getCreateTime())
                                                                    .append("updateBy", getUpdateBy())
                                                                    .append("updateTime", getUpdateTime())
                                                                    .append("remark", getRemark())
                                                                    .toString();
  }

}
